﻿Public Class DubbeleBarcodesForm

    Private _dubbeleBarcodes As New List(Of String)

    Protected Overrides Sub OnLoad(ByVal e As EventArgs)
        MyBase.OnLoad(e)
        InitData()
    End Sub

#Region "Events"

    Private Sub BindingSourceLeft_CurrentChanged(ByVal sender As Object, ByVal e As EventArgs) Handles BindingSourceLeft.CurrentChanged
        Dim selectedBarcode As String = "ONBESTAAND"
        If (BindingSourceLeft.Current IsNot Nothing) Then
            ' dit treedt alleen op als je de laatste dubbele barcode net gemerged hebt (niet als je het opent zonder dat er dubbele barcodes zijn)
            selectedBarcode = BindingSourceLeft.Current.ToString
        End If

        ' Van verkoopbaar nemen we de original versie omdat anders door Verkoopbaar op False te zetten het artikel niet meer te zien is.
        Dim artikelsMetDezeBarcode As List(Of Integer) = (From a In Utility.Data.Artikels _
                                                        Where a.RowState <> DataRowState.Deleted _
                                                        AndAlso a.Barcode = selectedBarcode _
                                                        AndAlso CBool(a(Utility.Data.Artikels.VerkoopbaarColumn.ColumnName, DataRowVersion.Original)) _
                                                        Select a.Id) _
                                                        .ToList()
        If (artikelsMetDezeBarcode.Any) Then
            Dim idArtikelLeft As Integer = artikelsMetDezeBarcode.First
            ArtikelControlLeft.IdArtikel = idArtikelLeft
            Dim andereArtikels As List(Of Integer) = (From a In artikelsMetDezeBarcode _
                                                      Where a <> idArtikelLeft) _
                                                      .ToList()
            Me.BindingSourceRight.DataSource = andereArtikels
        Else
            ArtikelControlLeft.IdArtikel = 0
            Me.BindingSourceRight.DataSource = Nothing
            End If
    End Sub

    Private Sub BindingSourceRight_CurrentChanged(ByVal sender As Object, ByVal e As EventArgs) Handles BindingSourceRight.CurrentChanged
        Dim selectedId As Integer = Convert.ToInt32(BindingSourceRight.Current)
        ArtikelControlRight.IdArtikel = selectedId
        UpdateAandacht()
    End Sub

    Private Sub ButtonLeftToRight_Click(ByVal sender As Object, ByVal e As EventArgs) Handles ButtonLeftToRight.Click
        MergeArtikels(ArtikelControlLeft.IdArtikel, ArtikelControlRight.IdArtikel)
    End Sub

    Private Sub ButtonRightToLeft_Click(ByVal sender As Object, ByVal e As EventArgs) Handles ButtonRightToLeft.Click
        MergeArtikels(ArtikelControlRight.IdArtikel, ArtikelControlLeft.IdArtikel)
    End Sub

#End Region

#Region "Private methods"

    Private Sub InitData()
        _dubbeleBarcodes = BarcodeDal.GetDubbeleBarcodes()
        Me.BindingSourceLeft.DataSource = _dubbeleBarcodes
    End Sub

    Private Sub UpdateAandacht()
        Dim artikelSource As ArtikelsDataSet.ArtikelsRow = Utility.Data.Artikels.FindById(ArtikelControlLeft.IdArtikel)
        Dim artikelTarget As ArtikelsDataSet.ArtikelsRow = Utility.Data.Artikels.FindById(ArtikelControlRight.IdArtikel)

        If (artikelSource IsNot Nothing AndAlso artikelTarget IsNot Nothing) Then
            ArtikelControlLeft.SetLabelAandacht(ArtikelControlLeft.OmschrijvingLabel1, artikelSource.Omschrijving <> artikelTarget.Omschrijving)
            ArtikelControlRight.SetLabelAandacht(ArtikelControlRight.OmschrijvingLabel1, artikelSource.Omschrijving <> artikelTarget.Omschrijving)

            ArtikelControlLeft.SetLabelAandacht(ArtikelControlLeft.PrijsLabel1, artikelSource.Prijs <> artikelTarget.Prijs)
            ArtikelControlRight.SetLabelAandacht(ArtikelControlRight.PrijsLabel1, artikelSource.Prijs <> artikelTarget.Prijs)
        End If
    End Sub

    Private Sub MergeArtikels(ByVal idArtikelSource As Integer, ByVal idArtikelTarget As Integer)
        Try
            Dim dal As New ImportDal()
            dal.MergeArtikels(idArtikelSource, idArtikelTarget)

            ' Refresh data on screen
            ArtikelControlLeft.IdArtikel = 0
            ArtikelControlLeft.IdArtikel = idArtikelSource
            ArtikelControlRight.IdArtikel = 0
            ArtikelControlRight.IdArtikel = idArtikelTarget
        Catch ex As Exception
            log.WriteError("DubbeleBarcodesForm.MergeArtikels", ex)
            MsgBox.ShowError(ex.Message)
        End Try
    End Sub

#End Region

End Class